# Set the working directory to the project folder. 
project_folder <- "."
setwd(project_folder)
library(Seurat)
library(ggplot2)
library(ggalluvial)
library(grid)
library(forcats)
library(see)
library(dplyr)
library(gghalves)
library(viridis)
library(stringr)
library(RColorBrewer)
library(kableExtra)
library(ggpubr)
library(rstatix)
library(ReactomePA)
library(clusterProfiler)
library(UCell)
library(EnhancedVolcano)
cols1 <- c(`0 CD8+ Eff mem (EM)` = "#A6CEE3", `1 CD8+ Eff cytotox (Ecyt)` = "#1F78B4",
    `3 CD4+ Naive/SCM` = "#33A02C", `6 CD4+ Central/Effector memory (CM/EM)` = "#FDBF6F",
    `9 γδ Tcells` = "#6A3D9A", `Proliferative cells` = "#F7D764")
cols2 <- c(`0 CD8+ Eff mem (EM)` = "#A6CEE3", `1 CD8+ Eff cytotox (Ecyt)` = "#1F78B4",
    `2 Early prolif: HMGN+/HMGB+/PCNA+ cells` = "#B2DF8A", `3 CD4+ Naive/SCM` = "#33A02C",
    `4 Early  prolif: MCM3/5/7+ PCNA+ cells` = "#FB9A99", `5 Late prolif: histones enriched MKI67+ cells` = "#E31A1C",
    `6 CD4+ Central/Effector memory (CM/EM)` = "#FDBF6F", `7 Ribosomal/Mitocondrial/Degradated cells` = "#FF7F00",
    `8 Late prolif: CDK+/CDC+/AURKA+ MIK67+ cells` = "#CAB2D6", `9 γδ Tcells` = "#6A3D9A")
cols3 <- c(`CAR+` = "#66c2a5", `CAR-` = "#fc8d62")
cols4 <- c("#264653", "#2a9d8f", "#e9c46a", "#f4a261", "#e76f51")
cols5 <- c(IP = "#4E6AAB", Peak = "#e78ac3")
cols6 <- c(CD4 = "#147D2C", CD8 = "#F5C936", Unknown = "#7f7f7f", `CD4- CD8-` = "#38369A")
cols7 <- c("#F8766D", "#00BA38", "#619CFF")
cols8 <- c("#E69F00FF", "#56B4E9FF", "#009E73FF", "#F0E442FF")

Exhaustion

integrated.obj <- readRDS("integrated.obj.rds")

Analysis

exhaustion_genes <- c("TOX", "PDCD1", "LAG3", "TIGIT", "CASP8", "HAVCR2", "CTLA4",
    "PTPN11", "CD160", "CD244")
# 'JAK1','STAT1'
integrated.obj <- AddModuleScore(object = integrated.obj, features = list(exhaustion_genes),
    name = "Exh.MGM")
FeaturePlot(integrated.obj, features = exhaustion_genes)

IP

Published signatures

Yost.markers <- read.csv("bcc_tcell_top100_markers_Yost_et al.txt", sep = "\t")

Yost.markers2 <- Yost.markers[Yost.markers$cluster == "CD8_ex", ]

signatures <- list(Exhausted_Wherry_2007 = c("AARD", "ACADVL", "ACKR3", "ADAM7",
    "ADCY6", "ADGRG1", "AFP", "AHR", "ALCAM", "ALOXE3", "ANXA3", "AOPEP", "APOBEC2",
    "ART1", "ATP5IF1", "ATP5MF", "AUH", "BAAT", "BCL2L11", "BCL3", "BLK", "BTK",
    "CANX", "CCDC28B", "CCDC93", "CCR6", "CCRL2", "CD22", "CD244", "CELA1", "CELF4",
    "CEP250", "CFH", "CFHR2", "CISH", "CKMT1B", "CKMT2", "CLIC4", "COCH", "CORO2B",
    "CRYZ", "CSF1", "CSRP1", "CTSE", "CUBN", "CXCR2", "CXCR5", "CYTH3", "DDIT4",
    "DHRS7B", "DLG3", "DOCK7", "DPP7", "EEA1", "EFNB3", "EGR2", "ELK1", "ENTPD1",
    "EOMES", "EPCAM", "ERCC5", "ETV1", "FAM171A1", "FAM207A", "FASLG", "FKBP10",
    "FLNA", "FLT3", "FSTL1", "GAMT", "GAPDHS", "GATA1", "GCM2", "GCSAM", "GDNF",
    "GPD2", "GPM6B", "GRIA1", "GRM8", "GSX1", "GTF3C4", "GZMB", "H1-4", "H1-5", "HAO2",
    "HIF1A", "HLA-DMA", "HMGA2", "HOXB8", "HOXC6", "HOXD10", "HSD3B7", "HSPA4L",
    "IFI27L2", "IFIH1", "IL10", "IL1A", "IL1RN", "IMMT", "ITGAV", "KCNAB1", "KCNU1",
    "KCTD9", "KHK", "KRT27", "LAMC1", "LAT2", "LCLAT1", "LGMN", "LHPP", "LITAF",
    "LRP10", "LY75", "LY86", "MAP2", "MC5R", "MCAM", "MFHAS1", "MKI67", "MMP14",
    "MRPL48", "MRPS2", "MS4A1", "MYCL", "MYO6", "MYRF", "NAB2", "NAT2", "NDUFB4",
    "NDUFS4", "NEFH", "NELFE", "OSMR", "PARP1", "PAWR", "PERP", "PLA2R1", "PLOD3",
    "PLSCR1", "POLR2C", "PRDM1", "PRL", "PROX1", "PRR15", "PRRC1", "PTCH1", "PTMS",
    "PTPN11", "PTPRA", "PTPRJ", "RGS16", "RPRD1B", "RPS14", "RUNX1T1", "SAPCD1",
    "SCGB1A1", "SCN7A", "SEC14L1", "SELP", "SFRP2", "SGO1", "SHMT2", "SLC27A4", "SLC3A1",
    "SLC4A7", "SLC4A8", "SPIC", "SPOCK1", "SPOCK2", "SPRR2A", "ST6GALNAC2", "STRA6",
    "SURF4", "SYPL1", "TBL1X", "TCF7L1", "TERF1", "TFDP1", "TG", "THEG", "TLN1",
    "TLR7", "TM4SF1", "TMEM150A", "TMEM214", "TMEM266", "TNFRSF4", "TWSG1", "VAMP5",
    "VMP1", "VNN1", "WDR55", "WFS1", "WIZ", "WNK2", "XCR1", "YAP1", "ZNF292", "ZNF35",
    "ZNF821"), Exhausted_Carmona_2019 = c("CCL3", "TNFRSF9", "RGS16", "DUT", "PRF1",
    "MT1A", "CCL4", "TIGIT", "PDCD1", "ANXA2", "TNFRSF4", "LAG3", "SAMSN1", "RGS2",
    "TOX", "BHLHE40", "STMN1", "RPS27L", "LITAF", "TXN", "HAVCR2", "HILPDA", "NR4A2",
    "2810417H13RIK", "CASP3", "SERPINA3", "IL2RB", "PGLYRP1", "NAP1L1", "CENPA",
    "COX17", "IRF8", "PLEK", "NRGN", "SH2D2A", "CTLA4", "STAT3", "HSP90B1", "MMD",
    "CDK6", "IFNG", "AA467197", "CST7", "SERPINB6", "GZMB", "UHRF2", "HIST1H2AP",
    "RBPJ", "HMGB1", "S100A4", "VAMP8", "TPI1", "BCL2A1", "RAN", "NRP1", "VIM", "GPR65",
    "CKS1B", "LAT2", "D16ERTD472E", "HNRNPA1", "CDKN2A", "HMGN2", "FABP5", "PGK1",
    "IL10RA", "LILRB4A", "CYCS", "SLC16A11", "SNRPD1", "SDF4", "PLP2", "CXCR6", "CALR",
    "ITGAV", "GLPeakR1", "GPD2", "CCRL2", "NDUFB8", "ADAM8", "RANBP1", "SIVA1", "CALM3",
    "DBI", "ATP5PF", "GM10282", "2310031A07RIK", "SEC11C", "GLDC", "SERPINB9", "ARSB",
    "ATP5IF1", "ID2", "KLRD1", "PLAC8", "CISD1", "ACADL", "CD74", "PGAM1"), Exhausted_Yost_2019 = Yost.markers2$gene,
    exhaustion_genes = c("TOX", "PDCD1", "LAG3", "TIGIT", "CASP8", "HAVCR2", "CTLA4",
        "PTPN11", "CD160", "CD244"), Markers_exhaustion = c("PDCD1", "LAG3", "HAVCR2",
        "KLRG1", "TIGIT", "CD244", "CD160", "BTLA", "CTLA4", "ENTPD1", "ID2"))

integrated.obj.IP <- subset(x = integrated.obj, subset = Timepoint == "IP")

integrated.obj.IP <- AddModuleScore_UCell(integrated.obj.IP, features = signatures)
## Warning: The following genes were not found and will be
##                         imputed to exp=0:
## * AOPEP,H1-4,H1-5,2810417H13RIK,AA467197,HIST1H2AP,D16ERTD472E,LILRB4A,GLPeakR1,GM10282,2310031A07RIK,AC092580.4
featnames <- paste0(names(signatures), "_UCell")
DotPlot(integrated.obj.IP, features = featnames, group.by = "Patient_id", cols = "RdBu") +
    theme(text = element_text(size = 18), axis.text.x = element_text(angle = 45,
        vjust = 1, hjust = 1)) + xlab("") + ylab("")

DotPlot(integrated.obj.IP, features = featnames, group.by = "Patient_id", cols = "RdBu") +
    theme(text = element_text(size = 18), axis.text.x = element_text(angle = 45,
        vjust = 1, hjust = 1)) + xlab("") + ylab("")

# New plots
integrated.obj.IP$Pt_CAR <- paste(integrated.obj.IP$Patient_id, integrated.obj.IP$Class1,
    sep = "_")

DotPlot(integrated.obj.IP, features = featnames, group.by = "Pt_CAR", cols = "RdBu") +
    theme(text = element_text(size = 18), axis.text.x = element_text(angle = 45,
        vjust = 1, hjust = 1)) + xlab("") + ylab("")

integrated.obj.IP$Pt_CD <- paste(integrated.obj.IP$Patient_id, integrated.obj.IP$final_criteria,
    sep = "_")

DotPlot(subset(integrated.obj.IP, final_criteria != "Unknown"), features = featnames,
    group.by = "Pt_CD", cols = "RdBu") + theme(text = element_text(size = 18), axis.text.x = element_text(angle = 45,
    vjust = 1, hjust = 1)) + xlab("") + ylab("")

DotPlot(integrated.obj.IP, features = featnames, group.by = "Class1", cols = "RdBu",
    scale = FALSE) + theme(text = element_text(size = 18), axis.text.x = element_text(angle = 45,
    vjust = 1, hjust = 1)) + xlab("") + ylab("")

Session Info

sessionInfo()
## R version 4.3.0 (2023-04-21)
## Platform: aarch64-apple-darwin20 (64-bit)
## Running under: macOS Ventura 13.4.1
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRblas.0.dylib 
## LAPACK: /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.11.0
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## time zone: Europe/Madrid
## tzcode source: internal
## 
## attached base packages:
## [1] grid      stats     graphics  grDevices utils     datasets  methods  
## [8] base     
## 
## other attached packages:
##  [1] EnhancedVolcano_1.18.0 ggrepel_0.9.3          UCell_2.4.0           
##  [4] clusterProfiler_4.8.1  ReactomePA_1.44.0      rstatix_0.7.2         
##  [7] ggpubr_0.6.0           kableExtra_1.3.4       RColorBrewer_1.1-3    
## [10] stringr_1.5.0          viridis_0.6.3          viridisLite_0.4.2     
## [13] gghalves_0.1.4         dplyr_1.1.2            see_0.7.5             
## [16] forcats_1.0.0          ggalluvial_0.12.5      ggplot2_3.4.2         
## [19] SeuratObject_4.1.3     Seurat_4.3.0           knitr_1.43            
## 
## loaded via a namespace (and not attached):
##   [1] matrixStats_0.63.0          spatstat.sparse_3.0-1      
##   [3] bitops_1.0-7                enrichplot_1.20.0          
##   [5] HDO.db_0.99.1               httr_1.4.6                 
##   [7] webshot_0.5.4               tools_4.3.0                
##   [9] sctransform_0.3.5           backports_1.4.1            
##  [11] utf8_1.2.3                  R6_2.5.1                   
##  [13] lazyeval_0.2.2              uwot_0.1.14                
##  [15] withr_2.5.0                 sp_1.6-0                   
##  [17] graphite_1.46.0             gridExtra_2.3              
##  [19] progressr_0.13.0            cli_3.6.1                  
##  [21] Biobase_2.60.0              formatR_1.14               
##  [23] spatstat.explore_3.2-1      scatterpie_0.2.0           
##  [25] labeling_0.4.2              sass_0.4.6                 
##  [27] spatstat.data_3.0-1         ggridges_0.5.4             
##  [29] pbapply_1.7-0               systemfonts_1.0.4          
##  [31] yulab.utils_0.0.6           gson_0.1.0                 
##  [33] DOSE_3.26.1                 svglite_2.1.1              
##  [35] parallelly_1.35.0           rstudioapi_0.14            
##  [37] RSQLite_2.3.1               generics_0.1.3             
##  [39] gridGraphics_0.5-1          ica_1.0-3                  
##  [41] spatstat.random_3.1-5       car_3.1-2                  
##  [43] GO.db_3.17.0                Matrix_1.5-4               
##  [45] fansi_1.0.4                 S4Vectors_0.38.1           
##  [47] abind_1.4-5                 lifecycle_1.0.3            
##  [49] yaml_2.3.7                  carData_3.0-5              
##  [51] SummarizedExperiment_1.30.1 qvalue_2.32.0              
##  [53] Rtsne_0.16                  blob_1.2.4                 
##  [55] promises_1.2.0.1            crayon_1.5.2               
##  [57] miniUI_0.1.1.1              lattice_0.21-8             
##  [59] cowplot_1.1.1               KEGGREST_1.40.0            
##  [61] pillar_1.9.0                fgsea_1.26.0               
##  [63] GenomicRanges_1.52.0        future.apply_1.11.0        
##  [65] codetools_0.2-19            fastmatch_1.1-3            
##  [67] leiden_0.4.3                glue_1.6.2                 
##  [69] downloader_0.4              ggfun_0.0.9                
##  [71] data.table_1.14.8           vctrs_0.6.2                
##  [73] png_0.1-8                   treeio_1.24.0              
##  [75] gtable_0.3.3                cachem_1.0.8               
##  [77] xfun_0.39                   S4Arrays_1.0.4             
##  [79] mime_0.12                   tidygraph_1.2.3            
##  [81] survival_3.5-5              SingleCellExperiment_1.22.0
##  [83] ellipsis_0.3.2              fitdistrplus_1.1-11        
##  [85] ROCR_1.0-11                 nlme_3.1-162               
##  [87] ggtree_3.8.0                bit64_4.0.5                
##  [89] RcppAnnoy_0.0.20            GenomeInfoDb_1.36.0        
##  [91] bslib_0.4.2                 irlba_2.3.5.1              
##  [93] KernSmooth_2.23-21          colorspace_2.1-0           
##  [95] BiocGenerics_0.46.0         DBI_1.1.3                  
##  [97] tidyselect_1.2.0            bit_4.0.5                  
##  [99] compiler_4.3.0              rvest_1.0.3                
## [101] graph_1.78.0                BiocNeighbors_1.18.0       
## [103] xml2_1.3.4                  DelayedArray_0.26.3        
## [105] plotly_4.10.1               shadowtext_0.1.2           
## [107] scales_1.2.1                lmtest_0.9-40              
## [109] rappdirs_0.3.3              digest_0.6.31              
## [111] goftest_1.2-3               spatstat.utils_3.0-3       
## [113] rmarkdown_2.21              XVector_0.40.0             
## [115] htmltools_0.5.5             pkgconfig_2.0.3            
## [117] MatrixGenerics_1.12.0       highr_0.10                 
## [119] fastmap_1.1.1               rlang_1.1.1                
## [121] htmlwidgets_1.6.2           shiny_1.7.4                
## [123] farver_2.1.1                jquerylib_0.1.4            
## [125] zoo_1.8-12                  jsonlite_1.8.4             
## [127] BiocParallel_1.34.2         GOSemSim_2.26.0            
## [129] RCurl_1.98-1.12             magrittr_2.0.3             
## [131] GenomeInfoDbData_1.2.10     ggplotify_0.1.0            
## [133] patchwork_1.1.2             munsell_0.5.0              
## [135] Rcpp_1.0.10                 ape_5.7-1                  
## [137] reticulate_1.28             stringi_1.7.12             
## [139] ggraph_2.1.0                zlibbioc_1.46.0            
## [141] MASS_7.3-60                 plyr_1.8.8                 
## [143] parallel_4.3.0              listenv_0.9.0              
## [145] deldir_1.0-6                Biostrings_2.68.1          
## [147] graphlayouts_1.0.0          splines_4.3.0              
## [149] tensor_1.5                  igraph_1.4.2               
## [151] spatstat.geom_3.2-1         ggsignif_0.6.4             
## [153] reshape2_1.4.4              stats4_4.3.0               
## [155] evaluate_0.21               tweenr_2.0.2               
## [157] httpuv_1.6.11               RANN_2.6.1                 
## [159] tidyr_1.3.0                 purrr_1.0.1                
## [161] polyclip_1.10-4             future_1.32.0              
## [163] scattermore_1.1             ggforce_0.4.1              
## [165] broom_1.0.4                 xtable_1.8-4               
## [167] reactome.db_1.84.0          tidytree_0.4.2             
## [169] later_1.3.1                 tibble_3.2.1               
## [171] aplot_0.1.10                memoise_2.0.1              
## [173] AnnotationDbi_1.62.1        IRanges_2.34.0             
## [175] cluster_2.1.4               globals_0.16.2